# -*- coding: utf-8 -*-
"""
这是python调用股票小助手实现自动化交易的模块

股票自动交易助手 Python 自动下单接口
把此脚本和 Order.dll 放到你自己编写的脚本同一目录
如何使用请参考 StockOrder.py

调用方法：
from autotrad import stock_order_api
stockapi = stock_order_api.StockOrder()
# 获取账户金额
stockapi.get_account_info('',0,0)
# 查询可用金额
stockapi.get_account_info('',1,0)
# 获取持有的股票代码
all_stock = stockapi.get_all_position_code(0)
# 获取股票持仓信息
stockapi.get_pos_info('000338',0,0)


"""

import ctypes

# 加载API库
dll = r"E:\stock_py\stock_py\autotrad\Order.dll"


class StockOrder(object):
    def __init__(self, dll=dll):
        # 加载API库
        self.api = ctypes.windll.LoadLibrary(dll)

    def buy(self, stkcode, vol, price, formulanum, zhushouhao):
        """买入函数。
        stkCode：股票代码，格式 '000338'
        vol：买入数量:股数
        price：买入价格:如果是0按助手的设置价格下单
        formulaNum：公式编号,和大智慧公式编号类似，只是一个标记,区分那个买入的
        ZhuShouHao：助手编号，如果开了多个助手，可以指定编号
        return：返回值无意义，可忽略
        """
        self.api.Buy1.argtypes = [ctypes.c_wchar_p, ctypes.c_int, ctypes.c_float, ctypes.c_int, ctypes.c_int]
        self.api.Buy1(stkcode, vol, price, formulanum, zhushouhao)

    def sell(self, stkcode, vol, price, formulanum, zhushouhao):
        """卖出函数，参数的意义同buy函数"""
        self.api.Sell1.argtypes = [ctypes.c_wchar_p, ctypes.c_int, ctypes.c_float, ctypes.c_int, ctypes.c_int]
        self.api.Sell1(stkcode, vol, price, formulanum, zhushouhao)

    def get_all_position_code(self, zhushouhao=0):
        """获取持有的所有股票代码，返回list格式，股票代码格式是 600001 """
        self.api.GetAllPositionCode.restype = ctypes.c_wchar_p
        self.api.GetAllPositionCode.argtypes = [ctypes.c_int]
        all_stock_code = self.api.GetAllPositionCode(zhushouhao)
        all_stock_code = all_stock_code.split(',')
        return all_stock_code

    def get_pos_info(self, stkcode, ntype, nzhushouhao=0):
        """获取个股持仓信息.
        stkCode:股票代码，如:600000
        ntype:持仓信息类型:0持仓总量(股)//1可卖数量(股)//2成本价//3盈利金额//4盈利百分比 //5持仓市值//6下单天数//7持仓天数
        nZhuShouHao:助手编号，如果开了多个助手，可以指定编号
        return:个股持仓信息
        """
        self.api.GetPosInfo.restype = ctypes.c_float
        self.api.GetPosInfo.argtypes = [ctypes.c_wchar_p, ctypes.c_int, ctypes.c_int]
        info = self.api.GetPosInfo(stkcode, ntype, nzhushouhao)
        return info

    def get_account_info(self, stkcode, ntype, nzhushouhao):
        """获取账户信息.
        stkCode:股票代码,在此函数中传入应传入空字符串，即''
        nType:持仓信息类型://0总资产//1可用资金//2持仓总市值//3总盈利金额//4持仓数量
        nZhuShouHao:助手编号，如果开了多个助手，可以指定编号
        return:账户信息
        """
        self.api.GetAccountInfo.restype = ctypes.c_float
        self.api.GetAccountInfo.argtypes = [ctypes.c_wchar_p, ctypes.c_int, ctypes.c_int]
        info = self.api.GetAccountInfo(stkcode, ntype, nzhushouhao)
        return info


def main():
    pass


if __name__ == '__main__':
    main()
